home *** CD-ROM | disk | FTP | other *** search
- ********************************************************************************
- *EXAMPLE 11 - Vertical scroll down demonstration FOR BEGINNERS GUIDE TO MAC MC *
- *AUTHOR - STUART BALL JULY 94 *
- *SCREEN MUST BE SET TO 256 COLOUR MODE FOR THIS EXAMPLE *
- ********************************************************************************
-
- SCREENROW: EQU $0106 WIDTH OF EAch screen line
- DEVICELIST: EQU $08A8 THE ADDRESS OF DEVICELIST
- gdPMap_offset: EQU 22
- DIST: EQU 1 VERTICAL SCROLL STEP IN PIXELS
-
- EXAMPLE11: MOVEM.L A5-A6,-(SP) SAVE MAC WORLD
- BSR INIT INITIALISE OUR VARIABLES
-
- MOVE.L #49,D0
- SCROLL_IT: BSR SCROLL_DOWN SCROLL THE SCREEN DOWN DIST PIXELS
- DBRA D0,SCROLL_IT SCROLL 50 TIMES
-
- MOVEM.L (SP)+,A5-A6 RESTORE MAC WORLD
- RTS
- ************************END OF EXAMPLE 11***************************************
-
- **INIT SETS UP OUR VARIABLES
- INIT: LEA MY_VARS(PC),A6 A6 IS OUR VARIABLE POINTER
- MOVE.L DEVICELIST,A0
- MOVE.L (A0),A0 POINT TO DEVICELIST
- MOVE.L A0,A1 COPY ADDRESS OF DEVICE LIST
- MOVE.L gdPMap_offset(A1),A1 A1=POINTER TO GDPMAP
- MOVE.L (A1),A1 gdPMap IN A1
- MOVE.W 12(A1),LINE_LENGTH(A6) MAX X OF SCREEN
- MOVE.W 10(A1),NUMB_OF_LINES(A6) MAX Y OF SCREEN
- MOVE.L (A1),VRAM_ADDR(A6) SAVE VRAM ABSOLUTE ADDRESS
- RTS
-
- **SCROLL_DOWN SCROLLS THE SCREEN DOWN BY 8 PIXELS
- **EXPECTS VRAM_ADDR,NUMB_OF_LINES AND LINE_LENGTH TO BE SET UP.
- SCROLL_DOWN: MOVEM.L D2-D7/A0-A1,-(SP) SAVE REGS
- MOVE.L VRAM_ADDR(A6),A0 START OF VRAM
- MOVE.W SCREENROW,D7 PHYSICAL LENGTH OF LINES
- EXT.L D7
- MOVE.W NUMB_OF_LINES(A6),D6 LINES ON SCREEN
- EXT.L D6
- MULS D7,D6 D6 = LAST LINE ON SCREEN
- CLR.L D5 FOR LINE_LENGTH
- MOVE.W LINE_LENGTH(A6),D5
- EXT.L D5
- ADD.L D5,D6 D6 = LAST PIXEL ON SCREEN (BOT RIGHT)
- MOVE.L D6,A1
- ADD.L A0,A1 A1=PHYSICAL VRAM ADDR OF LAST PIXEL
- MOVE.L A1,A0 A1 IS THE DESTINATION LINE
-
- MOVE.L D7,D3 SCREENROW
- SUB.L D5,D3 SCREENROW-LINE_LENGTH
-
- MULU #DIST,D7 SCREENROW * SCROLL STEP
- SUB.L D7,A0 A0 = LAST PIXEL OF SOURCE LINE
-
- MOVE.W NUMB_OF_LINES(A6),D2 CALCULATE NUMBER OF
- EXT.L D2 LINES TO SCROLL
- SUB.L #DIST+1,D2 DIST PLUS 1 FOR DBRA
-
- SCROLL: MOVE.L D5,D4 LINE LENGTH IN BYTES
- LSR.L #2,D4 DIVIDED BY 4 FOR LONGS
- SUBQ.L #1,D4
-
- COPY_LINE: MOVE.L -(A0),-(A1) MOVE THE SOURCE LINE TO DESTINATION
- DBRA D4,COPY_LINE UNTIL ALL LONGS HAVE BEEN MOVED
- SUB.L D3,A0
- SUB.L D3,A1 POINT TO NEXT LINE
- DBRA D2,SCROLL MOVE NEXT LINE UNTIL ALL HAVE BEEN MOVED.
-
- MOVEM.L (SP)+,D2-D7/A0-A1 RESTORE REGS
- RTS
-
- *********************************VARIABLES FOLLOW********************************
- MY_VARS: DS.B 20 SPACE FOR OUR VARIABLES
-
- ******************************OFFSETS INTO VARIABLES*****************************
- NUMB_OF_LINES: RS.W 1 NUMBER OF PHYSICAL LINES ON SCREEN
- VRAM_ADDR: RS.L 1 ABSOLUTE ADDRESS OF VRAM
- LINE_LENGTH: RS.W 1 ACTUAL LENGTH OF EACH SCREEN LINE